## 绘制一个可以导入任何数据信息的地图
# 初步的demo：
import plotly.graph_objects as go
import plotly.express as px

class DrawMap(object):
    '''
    绘制需要对应经纬度的数据，呈现形式是地图，以直观分布
    '''
    def __init__(self, df):
        '''
        :param df: 用于绘图的df文件,必须含有lon，lat列名的列 DataFrame
        :param save:
        '''
        self.df = df

    def draw_map(self, color, hover_name, hover_data, title=None, save=False, savepath=None):
        '''
        参数说明 https://plotly.com/python-api-reference/generated/plotly.express.scatter_map.html
        :param color: 用来决定颜色深浅的值对应的列名 str
        :param hover_name: 悬停显示的值对应的列名 str
        :param hover_data: 悬停显示的数据值对应的列名 list
        :param title: 绘制的图片标题 str
        :param save: 是否存储图片 bool
        :param savepath: 图片存储路径,存储的文件格式为html str
        :return:
        '''
        fig = px.scatter_map(self.df,
                            lat="lat",
                            lon="lon",
                            color=color, # 用来决定颜色深浅的值
                            hover_name=hover_name, # 悬停显示的值
                            hover_data=hover_data, # 悬停显示的数据，times, lon, lat会自动包含
                            title=title,
                            # animation_frame='times',
                            color_continuous_scale=px.colors.carto.Temps
                            )
        # 地图参数增强配置  #todo: 没有效果
        fig.update_geos(
            resolution=110,
            scope="asia",
            showcountries=True,
            countrycolor="darkgrey",
            showsubunits=True,
            subunitcolor="grey",
            center={"lon": 104, "lat": 35},
            projection_scale=4,
            landcolor="lightyellow"  # 陆地底色增强对比
        )
        fig.show()
        if save:
            fig.write_html(savepath)

if __name__ == '__main__':
    import os
    import pandas as pd
    filelist = os.listdir(r'D:\work_files\projcet\generation_hour\phour_easy_report\不同气象数据集的对比\solargis_excel')
    dfs = []
    for file in filelist:
        df = pd.read_excel(r'D:\work_files\projcet\generation_hour\phour_easy_report\不同气象数据集的对比\solargis_excel\{}'.format(file))
        dfs.append(df)
    res = pd.concat(dfs, axis=0)
    draw = DrawMap(res)
    draw.draw_map(
                color='GHI',
                hover_name='GHI',
                hover_data=['区县地址','GHI','DNI','DIF'],
                title='solargis的水平辐照度数据',
                save=True,
                savepath=r'D:\work_files\projcet\generation_hour\phour_easy_report\不同气象数据集的对比\solargis_GHI.html'
    )